package com.wc.alorithm_luogu.P1088;

import java.util.Scanner;

/**
 * @Author congege
 * @Description
 * @Description 火星人
 * https://www.luogu.com.cn/problem/P1088
 * @Date Created in 2023/9/18-15:49
 */
public class Main2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();
        int[] array = new int[n];
        Main2 main = new Main2();
        for (int i = 0; i < n; i++) {
            array[i] = scan.nextInt();
        }
        while (m-- > 0) {
            main.next_permutation(array);
        }

        for (int i = 0; i < n; i++) {
            System.out.printf("%d%s", array[i], i < n - 1 ? " " : "");
        }
    }

    public boolean next_permutation(int[] array) {
        int index = array.length - 2;

        /**
         * 第一步
         * 从后往前找到第一个array[index] > array[index + 1]
         * 保证index+1后面的数是倒叙
         */
        while (array[index] > array[index + 1]) {
            index--;
            /**
             * 说明已经是最后一位全排列数了
             */
            if (index == -1) {
                return false;
            }
        }
        /**
         * 第二步
         * 在这些倒序中找到比这个数大并且是最小的数
         */
        int maxIdx = index + 1;
        while (array[maxIdx] > array[index]) {
            maxIdx++;
            if (maxIdx==array.length){
                break;
            }
        }
        maxIdx--;
        /**
         * 第三步
         * 交换位置
         */
        swap(array, index, maxIdx);

        /**
         * 将后面倒叙的位置正序过来
         */
        reverse(array, index + 1, array.length - 1);
        return true;
    }

    /**
     * 数组交换位置
     *
     * @param array
     * @param i
     * @param j
     */
    public void swap(int[] array, int i, int j) {
        int tmp = array[i];
        array[i] = array[j];
        array[j] = tmp;
    }

    /**
     * 数组部分倒置
     *
     * @param array
     * @param left
     * @param right
     */
    public void reverse(int[] array, int left, int right) {
        int round = (right - left + 1) / 2;
        while (round-- > 0) {
            swap(array, left, right);
            left++;
            right--;
        }
    }
}
